package pl.un4giv3n.mightvsmagic.action;

import static pl.un4giv3n.mightvsmagic.utils.ItemUtil.SHARPEN_COST;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import pl.un4giv3n.mightvsmagic.entity.Item;
import pl.un4giv3n.mightvsmagic.entity.User;
import pl.un4giv3n.mightvsmagic.utils.ItemUtil;
/**
 * @author andrzejewskia
 * change item name action
 */
public class SharpenItemAction extends PersistenceAction {

	private static final long serialVersionUID = 1L;
	/**
	 * session user
	 */
	private User user;
	private Long itemId;
	private String itemName;

	@Override
	public String execute() {
		EntityManager entityManager = getEntityManager();
		user = getSessionUser(entityManager);
		if (user == null) {
			addActionError("Zaloguj się");
			entityManager.close();
			return LOGIN;
		}
		long dragonTeeth = user.getDragonTeeth();
		if(dragonTeeth < SHARPEN_COST){
			addActionError("Nie stać cię na zaklęcie przedmiotu");
			entityManager.close();
			return ERROR;
		}
		Item item = entityManager.find(Item.class, itemId);
		if(item == null){
			addActionError("Nie znaleziono przedmiotu o podanym id!");
			entityManager.close();
			return ERROR;
		}
		if(!ItemUtil.canBesSharpened(item)){
			addActionError("Ten przedmiot nie może zostać zaklęty!");
			entityManager.close();
			return ERROR;
		}
		EntityTransaction transaction = entityManager.getTransaction();
		transaction.begin();
		item.setMaxDmg(item.getMaxDmg()+1);
		item.setMinDmg(item.getMinDmg()+1);
		item.setSharpened(true);
		user.setDragonTeeth(user.getDragonTeeth() - SHARPEN_COST);
		entityManager.merge(user);
		entityManager.merge(item);
		entityManager.flush();
		transaction.commit();
		entityManager.close();
		return SUCCESS;
	}

	public User getUser() {
		return user;
	}

	public Long getItemId() {
		return itemId;
	}

	public void setItemId(Long itemId) {
		this.itemId = itemId;
	}
	
	public String getItemName() {
		return itemName;
	}

	public void setItemName(String itemName) {
		this.itemName = itemName;
	}
	
}
